//
//  ViewController.m
//  25_多线程
//
//  Created by 徐康 on 16/8/17.
//  Copyright © 2016年 KX. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *image;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
  NSData *data =  [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://img5.cache.netease.com/3g/2015/10/30/20151030124521c1f7e.jpg"]];
   // 返回主线程，显示图片
    [self performSelector:@selector(onMainThreadHandleImag:) withObject:data afterDelay:1];
    //不关心线程问题
    //[self performSelectorInBackground:@selector(onMainThreadHandleImag:) withObject:nil];
   // performSelectorOnMainThread 返回主线程进行操作
    // Do any additional setup after loading the view, typically from a nib.
    // iOS下的多线程
    // 1. 进程和线程
    // 什么是进程?  进程:当用户下达执行应用程序的命令时, 所启动的东西.
    // 什么是线程?  是进程的执行单位, 线程比作工人, 进程比作工厂
    // 2.多线程:为了更好的进行一些程序的操作,节省时间,提高效率
    // 一个进程不能过多的创建线程, 资源消耗过大.5个左右的线程
    // 注意:所有UI的操作,都放在主线程中进行
    // 需要开辟线程的耗时操作: 图像文字渲染, 大数据存储,网络请求等
    // 3.NSThread
      // 1.currentThread 获取当前线程
    // <NSThread: 0x7fdeb9c02800>{number = 1, name = main}
    // name 线程名  number 线程编号
    // main代表主线程
    NSThread *thread = [NSThread currentThread];
    NSLog(@"%@",thread);
      // 2.开辟子线程执行操作
    //  子线程随机创建
    [NSThread detachNewThreadSelector:@selector(newThread) toTarget:self withObject:nil];
       // 3.延迟线程的执行, 固定时间
   // NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10];
//    [NSThread sleepUntilDate:date];
       // 4.延迟线程的执行, 相对时间
//    [NSThread sleepForTimeInterval:10];
    // 5. 退出当前线程, 不要退出主线程, 退出后线程后续操作不会再执行
//    [NSThread exit];
       // 6.线程优先级,默认0.5
    double priority = [NSThread threadPriority];
    NSLog(@"%lf",priority);
       // 7.线程名
    thread.name = @"王道林的线程";
    [NSThread mainThread].name = @"xxx的主线程";
    NSLog(@"%@",[NSThread mainThread]);
         // 8. 判断是否是主线程
    [NSThread isMainThread];// 判断当前线程
    [[NSThread mainThread] isMainThread];// 判断线程对象是不是主线程
        // 9. 初始化方法,需要手动管理线程的声明周期
        // 初始化一个未启动的线程
    NSThread *newThread=  [[NSThread alloc]initWithTarget:self selector:@selector(myThread) object:nil];
    [newThread start];
   
}
- (void)onMainThreadHandleImag:(id)object {
    _image.image = [UIImage imageWithData:object];
}
- (void)myThread{
    NSLog(@"%s", __func__);
}
- (void)newThread{
    NSThread *thread = [NSThread currentThread];
    NSLog(@"newThread : %@",thread );
}
- (IBAction)click:(id)sender {
    for (int i = 0; i <100000000; i++) {
        NSLog(@"%d",i);
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
